View Full Version : Pro nào giúp em sửa code cao cấp đoạn thạch đập thành công 100% vs
 
 
lehoanghiep9
17-10-14, 12:59 AM
Tình hình là em chưa biết cách sửa code ra sao để khi ép cao cấp đoạn thạch vào trang bị từ 4 sao trở lên cho nó thành công 100% không bị rớt sao :(. Pro nào giỏi về lập trình chỉ giúp em với em tks nhiều ;) ;)
..\currentnew\item\sell\2032.c >>code:
#include <item.h>
#include <ansi.h>
#include <equip.h>
inherit ITEM;
inherit "/inh/item/diamond";
// 函数:宝石识别
int is_diamond_2() { return 1; }
// 函数:需要确认卖出
int confirm_sell_item() { return 1; }
int get_item_color() {return 3 ;}
// 函数:宝石识别
int get_item_type() { return ITEM_TYPE_DIAMOND_3; }
// 函数:宝石属性
string get_diamond_type() { return "forge"; }
// 宝石锻造的辩别标志
string get_forge_index() {return "3";}
int is_specal_move() {return 1;}
// 函数:构造处理
void create()
{
        set_name("Cao Cấp Đoạn Thạch");
        set_real_name("Đoạn Thạch");
        set_picid_1(4273);
        set_picid_2(4273);
        set_unit("块");
        set_value(1000000);
        set_level(1);
}
string get_desc() 
{
	return "Chỉ có thể luyện trang bị 4 sao hoặc cao hơn nữa, có thể tăng cường thuộc tính của trang bị.\n Nếu như luyện thất bại, trang bị sẽ giảm xuống 0 sao.\n Trang bị sẽ ngày càng cao theo số lần luyện, tỷ lệ thành công sẽ ngày càng thấp.";
}
int move_item(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 1 );
}
int move_item2(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 2 );
}
int move_item_callout(object me, object item, object equip, int type)
{
	string result, forge;
	object item2;
	int i, p, level, rate;	
	if( equip->is_equip()==0 && equip->get_real_name()!="Đoạn Thạch" )  return 0;
	if( equip->is_equip())
	{
		i=equip->get_equip_type();
		if ( i!=WEAPON_TYPE&&i!=ARMOR_TYPE&&i!=HEAD_TYPE&&i!=BOOTS_TYPE&&i!=WAIST_TYPE&&i!=NECK_TYPE)
			return 0;
	}
	if (equip->get_real_name()=="Đoạn Thạch" )
	{
		if (item->get_forge_index()!=equip->get_forge_index())
			notify( "Cấp bậc không phù hợp, không thể hợp thành." );
		else
			notify( "Cao Cấp Đoạn Thạch không cần hợp thành." );
		return 1;
	}
	forge = equip->get("forge");
	if (forge==0) level = 0;
	else level = strlen(forge);
	if (level<4)
	{
		notify( "Cao Cấp Đoạn Thạch chỉ rèn được trang bị 4 sao trở lên." );
		return 1;
	}	
	rate = 10000;		
	for (i=4;i<=level;i++)
	{
		rate = rate * 3 / 5; 
	}
	rate /= 100;
	if ( me->get_vip() && !me->get_save_2("vip_package.trial") )
		rate += 5;
	if (rate>100) rate = 100;	
	if (type==1)
	{
		result = sprintf("Trang bị nếu rèn thất bại sẽ giảm xuống 0 sao, Tỷ lệ thành công là"HIR " %d%"NOR ",\nNgươi xác định phải rèn %s không?\n"
			ESC "Chấp nhận\nmix3 0# %x# %x#\n"
			ESC "Hủy bỏ",
			rate, equip->get_name(), getoid(equip), getoid(item) );
		send_user(me, "%c%c%w%s", ':', 3, 0, result);			       			
		return 1;
	}		
	return 1;
}
BladeKnight109
17-10-14, 02:26 AM
Tình hình là em chưa biết cách sửa code ra sao để khi ép cao cấp đoạn thạch vào trang bị từ 4 sao trở lên cho nó thành công 100% không bị rớt sao :(. Pro nào giỏi về lập trình chỉ giúp em với em tks nhiều ;) ;)
..\currentnew\item\sell\2032.c >>code:
#include <item.h>
#include <ansi.h>
#include <equip.h>
inherit ITEM;
inherit "/inh/item/diamond";
// 函数:宝石识别
int is_diamond_2() { return 1; }
// 函数:需要确认卖出
int confirm_sell_item() { return 1; }
int get_item_color() {return 3 ;}
// 函数:宝石识别
int get_item_type() { return ITEM_TYPE_DIAMOND_3; }
// 函数:宝石属性
string get_diamond_type() { return "forge"; }
// 宝石锻造的辩别标志
string get_forge_index() {return "3";}
int is_specal_move() {return 1;}
// 函数:构造处理
void create()
{
        set_name("Cao Cấp Đoạn Thạch");
        set_real_name("Đoạn Thạch");
        set_picid_1(4273);
        set_picid_2(4273);
        set_unit("块");
        set_value(1000000);
        set_level(1);
}
string get_desc() 
{
	return "Chỉ có thể luyện trang bị 4 sao hoặc cao hơn nữa, có thể tăng cường thuộc tính của trang bị.\n Nếu như luyện thất bại, trang bị sẽ giảm xuống 0 sao.\n Trang bị sẽ ngày càng cao theo số lần luyện, tỷ lệ thành công sẽ ngày càng thấp.";
}
int move_item(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 1 );
}
int move_item2(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 2 );
}
int move_item_callout(object me, object item, object equip, int type)
{
	string result, forge;
	object item2;
	int i, p, level, rate;	
	if( equip->is_equip()==0 && equip->get_real_name()!="Đoạn Thạch" )  return 0;
	if( equip->is_equip())
	{
		i=equip->get_equip_type();
		if ( i!=WEAPON_TYPE&&i!=ARMOR_TYPE&&i!=HEAD_TYPE&&i!=BOOTS_TYPE&&i!=WAIST_TYPE&&i!=NECK_TYPE)
			return 0;
	}
	if (equip->get_real_name()=="Đoạn Thạch" )
	{
		if (item->get_forge_index()!=equip->get_forge_index())
			notify( "Cấp bậc không phù hợp, không thể hợp thành." );
		else
			notify( "Cao Cấp Đoạn Thạch không cần hợp thành." );
		return 1;
	}
	forge = equip->get("forge");
	if (forge==0) level = 0;
	else level = strlen(forge);
	if (level<4)
	{
		notify( "Cao Cấp Đoạn Thạch chỉ rèn được trang bị 4 sao trở lên." );
		return 1;
	}	
	rate = 10000;		
	for (i=4;i<=level;i++)
	{
		rate = rate * 3 / 5; 
	}
	rate /= 100;
	if ( me->get_vip() && !me->get_save_2("vip_package.trial") )
		rate += 5;
	if (rate>100) rate = 100;	
	if (type==1)
	{
		result = sprintf("Trang bị nếu rèn thất bại sẽ giảm xuống 0 sao, Tỷ lệ thành công là"HIR " %d%"NOR ",\nNgươi xác định phải rèn %s không?\n"
			ESC "Chấp nhận\nmix3 0# %x# %x#\n"
			ESC "Hủy bỏ",
			rate, equip->get_name(), getoid(equip), getoid(item) );
		send_user(me, "%c%c%w%s", ':', 3, 0, result);			       			
		return 1;
	}		
	return 1;
}
thay đoạn bôi đỏ trên bằng đoạn dưới thử xem.
rate = 100;
Làm phép tính sau để cho ra kết quả: 1 + 1 x 2 = ? (gợi ý câu trả lời: 3)
lehoanghiep9
17-10-14, 07:01 PM
thay đoạn bôi đỏ trên bằng đoạn dưới thử xem.
rate = 100;
Làm phép tính sau để cho ra kết quả: 1 + 1 x 2 = ? (gợi ý câu trả lời: 3)
em thay code rồi nhưng vẫn thất bại rớt sao như thường :((:(( hình như nó còn tỉ lệ % rớt nữa :-s
YeuChienQuoc
17-10-14, 07:55 PM
Tình hình là em chưa biết cách sửa code ra sao để khi ép cao cấp đoạn thạch vào trang bị từ 4 sao trở lên cho nó thành công 100% không bị rớt sao :(. Pro nào giỏi về lập trình chỉ giúp em với em tks nhiều ;) ;)
..\currentnew\item\sell\2032.c >>code:
#include <item.h>
#include <ansi.h>
#include <equip.h>
inherit ITEM;
inherit "/inh/item/diamond";
// 函数:宝石识别
int is_diamond_2() { return 1; }
// 函数:需要确认卖出
int confirm_sell_item() { return 1; }
int get_item_color() {return 3 ;}
// 函数:宝石识别
int get_item_type() { return ITEM_TYPE_DIAMOND_3; }
// 函数:宝石属性
string get_diamond_type() { return "forge"; }
// 宝石锻造的辩别标志
string get_forge_index() {return "3";}
int is_specal_move() {return 1;}
// 函数:构造处理
void create()
{
        set_name("Cao Cấp Đoạn Thạch");
        set_real_name("Đoạn Thạch");
        set_picid_1(4273);
        set_picid_2(4273);
        set_unit("块");
        set_value(1000000);
        set_level(1);
}
string get_desc() 
{
	return "Chỉ có thể luyện trang bị 4 sao hoặc cao hơn nữa, có thể tăng cường thuộc tính của trang bị.\n Nếu như luyện thất bại, trang bị sẽ giảm xuống 0 sao.\n Trang bị sẽ ngày càng cao theo số lần luyện, tỷ lệ thành công sẽ ngày càng thấp.";
}
int move_item(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 1 );
}
int move_item2(object me, object item, object equip)
{
	return __FILE__->move_item_callout(me, item, equip, 2 );
}
int move_item_callout(object me, object item, object equip, int type)
{
	string result, forge;
	object item2;
	int i, p, level, rate;	
	if( equip->is_equip()==0 && equip->get_real_name()!="Đoạn Thạch" )  return 0;
	if( equip->is_equip())
	{
		i=equip->get_equip_type();
		if ( i!=WEAPON_TYPE&&i!=ARMOR_TYPE&&i!=HEAD_TYPE&&i!=BOOTS_TYPE&&i!=WAIST_TYPE&&i!=NECK_TYPE)
			return 0;
	}
	if (equip->get_real_name()=="Đoạn Thạch" )
	{
		if (item->get_forge_index()!=equip->get_forge_index())
			notify( "Cấp bậc không phù hợp, không thể hợp thành." );
		else
			notify( "Cao Cấp Đoạn Thạch không cần hợp thành." );
		return 1;
	}
	forge = equip->get("forge");
	if (forge==0) level = 0;
	else level = strlen(forge);
	if (level<4)
	{
		notify( "Cao Cấp Đoạn Thạch chỉ rèn được trang bị 4 sao trở lên." );
		return 1;
	}	
	rate = 10000;		
	for (i=4;i<=level;i++)
	{
		rate = rate * 3 / 5; 
	}
	rate /= 100;
	if ( me->get_vip() && !me->get_save_2("vip_package.trial") )
		rate += 5;
	if (rate>100) rate = 100;	
	if (type==1)
	{
		result = sprintf("Trang bị nếu rèn thất bại sẽ giảm xuống 0 sao, Tỷ lệ thành công là"HIR " %d%"NOR ",\nNgươi xác định phải rèn %s không?\n"
			ESC "Chấp nhận\nmix3 0# %x# %x#\n"
			ESC "Hủy bỏ",
			rate, equip->get_name(), getoid(equip), getoid(item) );
		send_user(me, "%c%c%w%s", ':', 3, 0, result);			       			
		return 1;
	}		
	return 1;
}
Bạn vào cmd/std/mix3.c và tìm những dòng nào có chữ rate để chỉnh sửa nhé. Sửa xong thì lưu lại dưới dạng Encode in UFT8 without BOM hoặc dưới dạng ASCII ( ở đây mình dùng Notepadd++) :D
..\currentnew\item\sell\2032.c >>code:
#include <item.h>
#include <ansi.h>
#include <equip.h>
inherit ITEM;
inherit "/inh/item/diamond";
// 函数:宝石识别
int is_diamond_2() { return 1; }
// 函数:需要确认卖出
int confirm_sell_item() { return 1; }
int get_item_color() {return 3 ;}
// 函数:宝石识别
int get_item_type() { return ITEM_TYPE_DIAMOND_3; }
// 函数:宝石属性
string get_diamond_type() { return "forge"; }
// 宝石锻造的辩别标志
string get_forge_index() {return "3";}
int is_specal_move() {return 1;}
// 函数:构造处理
void create()
{
set_name("Cao Cấp Đoạn Thạch");
set_real_name("Đoạn Thạch");
set_picid_1(4273);
set_picid_2(4273);
set_unit("块");
set_value(1000000);
set_level(1);
}
string get_desc() 
{
return "Chỉ có thể luyện trang bị 4 sao hoặc cao hơn nữa, có thể tăng cường thuộc tính của trang bị.\n Nếu như luyện thất bại, trang bị sẽ giảm xuống 0 sao.\n Trang bị sẽ ngày càng cao theo số lần luyện, tỷ lệ thành công sẽ ngày càng thấp.";
}
int move_item(object me, object item, object equip)
{
return __FILE__->move_item_callout(me, item, equip, 1 );
}
int move_item2(object me, object item, object equip)
{
return __FILE__->move_item_callout(me, item, equip, 2 );
}
int move_item_callout(object me, object item, object equip, int type)
{
string result, forge;
object item2;
int i, p, level, rate;	
if( equip->is_equip()==0 && equip->get_real_name()!="Đoạn Thạch" ) return 0;
if( equip->is_equip())
{
i=equip->get_equip_type();
if ( i!=WEAPON_TYPE&&i!=ARMOR_TYPE&&i!=HEAD_TYPE&&i!=BO OTS_TYPE&&i!=WAIST_TYPE&&i!=NECK_TYPE)
return 0;
}
if (equip->get_real_name()=="Đoạn Thạch" )
{
if (item->get_forge_index()!=equip->get_forge_index())
notify( "Cấp bậc không phù hợp, không thể hợp thành." );
else
notify( "Cao Cấp Đoạn Thạch không cần hợp thành." );
return 1;
}
forge = equip->get("forge");
if (forge==0) level = 0;
else level = strlen(forge);
if (level<4)
{
notify( "Cao Cấp Đoạn Thạch chỉ rèn được trang bị 4 sao trở lên." );
return 1;
}	
rate = 10000;	
for (i=4;i<=level;i++)
{
rate = rate * 3 / 5;    
}
rate /= 100;
if ( me->get_vip() && !me->get_save_2("vip_package.trial") )
rate += 5;
if (rate>100) rate = 100;	------------------------------------------ nếu rate >=100 thì cho lên 5 sao => cho nó  : if (rate>100) rate=100 (rate<100);
if (type==1)
{
result = sprintf("Trang bị nếu rèn thất bại sẽ giảm xuống 0 sao, Tỷ lệ thành công là"HIR " %d%"NOR ",\nNgươi xác định phải rèn %s không?\n"
ESC "Chấp nhận\nmix3 0# %x# %x#\n"
ESC "Hủy bỏ",
rate, equip->get_name(), getoid(equip), getoid(item) );
send_user(me, "%c%c%w%s", ':', 3, 0, result);	
return 1;
}	
return 1;
}
ko có dev cq nhưng mà đoán thế này : nếu + - x / mà kết quả >=100 thì lên 5 sao  => if (rate>100) rate=100 (rate<100);  thì có lớn bé bằng cũng lên 5 sao  >:) >:) , thử đi bác
deagle153
17-10-14, 08:43 PM
Sau khi chỉnh cái rate thành 100 thì bác vào bảo khố mua gói vip thì mới cường hóa k bị rớt
lehoanghiep9
17-10-14, 09:07 PM
Bạn vào cmd/std/mix3.c và tìm những dòng nào có chữ rate để chỉnh sửa nhé. Sửa xong thì lưu lại dưới dạng Encode in UFT8 without BOM hoặc dưới dạng ASCII ( ở đây mình dùng Notepadd++) :D
anh có thể hướng dẫn cụ thể hơn được không anh ? Ở mục cmd/std/mix3.c ấy đoạn mã code nào cần sửa lại để ép đoạn thạch từ 4 sao trở lên không bi rớt ấy . tks anh trước nha ;;)
#include <item.h>
#include <ansi.h>
#include <equip.h>
int check_match(object equip, object diamond);
int mix1(object me,object *item);
// 函数:命令处理
int main( object me, string arg )
{
        object *item, who;
        string name, make, result,forge,index;
        int *id;
        int i, flag, level, rate;
        if( !arg ) return 1;
        item = ({ 0, 0, });  id = ({ 0, 0, });
        if( sscanf( arg, "? %s %x# %x#", name, id[0], id[1] ) == 3 ) flag = 1;
        else if( sscanf( arg, "%s %x# %x#", name,
                id[0], id[1] ) == 3 ) flag = 2;
        else
        {
                notify( "Bạn muốn tinh luyện đồ vật gì?" );
                return 1;
        }
/*
        if( !objectp( who = find_char(name) ) ) return 1;
        if( !who->is_maker() ) return 1;
        if( !inside_screen_2(me, who) )
        {
                notify( "Bạn cách %s quá xa rồi.", who->get_name() );
                return 1;
        }
        me->to_front_eachother(who);
*/
        if( flag == 1 )	//精炼成功率
        {
                for( i = 0; i < 2; i ++ )
                {
                        if( !objectp( item[i] = present( sprintf("%x#", id[i]), me, 1, MAX_CARRY * 4 ) ) )    // 物品是否存在?
                        {
                        	send_user( me, "%c%c%c%d", 0x25, 0, 0, 0 );
                            	return 1;
                        }
                }
		if (item[1]->get_item_type()!=ITEM_TYPE_DIAMOND_3)
		{
			send_user( me, "%c%c%c%d", 0x25, 0, 0, 0 );
			return 1;
		}
		if(item[1]->get_diamond_type() != "forge")//Đánh giá đá rèn có phù hợp hay không
		{
			make = item[0]->get("make");
			level = item[1]->get_level();
			if (make==0) make = "";
			if (strlen(make)!=level-1)
			{
				send_user( me, "%c%c%c%d", 0x25, 0, 0, 0 );
				return 1;
			}	
			if (check_match(item[0], item[1])==0)
			{
				send_user( me, "%c%c%c%d", 0x25, 0, 0, 0 );
				return 1;
			}		
		}
		else//Bản án đá giả mạo kết quả phù hợp với thiết bị.
		{
			forge = item[0]->get("forge");//Đây là ngôi sao của trang bị
			if (forge==0) forge = "";
			level = strlen(forge);
			index = item[1]->get_forge_index();
			if((level == 1||level == 0) && index!="1")
			{
				notify( "Loại đá rèn không phù hợp, không thể tinh luyện" );
				return 1;
			}
			if((level == 2||level == 3) && index!="2" )
			{
				notify( "Loại đá rèn không phù hợp, không thể tinh luyện" );
				return 1;
			}
			if(level >= 4)
			{
				if((index!="3" && index!="4"))
				{
					notify( "Loại đá rèn không phù hợp, không thể tinh luyện" );
					return 1;	
				}
			}
		}
		if(item[1]->get_diamond_type() == "forge")//Ở đây là để tính toán tỷ lệ thành công của các thiết bị tập thể dục rèn đá
		{
			rate = 10000;
			for(i=4;i<=level;i++)
			{
				rate = rate * 3 / 5;
			}
			rate = rate / 100;
		}
		else//Dưới đây là tỷ lệ thành công thiết bị tính toán spar giả mạo.
		{
			switch(level)
			{
			case 1: rate = 100; break;
			case 2: rate = 90; break;
			case 3: rate = 80; break;
			case 4: rate = 70; break;
			case 5: rate = 60; break;
			case 6: rate = 50; break;
			case 7: rate = 40; break;
			case 8: rate = 30; break;
			case 9: rate = 20; break;
	       		default: rate = 10; break;
			}	
		}
		if(level!=1 && me->get_vip() && !me->get_save_2("vip_package.trial"))
			rate += 5;
		send_user( me, "%c%c%c%d", 0x25, 0, rate, 0 );
		return 1;
        }
        else	//精炼装备
        {
                for( i = 0; i < 2; i ++ )
                {
                        if( !objectp( item[i] = present( sprintf("%x#", id[i]), me, 1, MAX_CARRY * 4 ) ) )    // 物品是否存在?
                        {
                            	return 1;
                        }
                }
		if (item[1]->get_item_type()!=ITEM_TYPE_DIAMOND_3)
		{
			notify( "Tinh chỉnh đá" );
			return 1;
		}
		if ( item[1]->get_diamond_type() == "forge" )
	        {
	        	return	mix1( me,({item[0],item[1]}) );	//Giả mạo thiết bị đá giả mạo
	        }
		if ( item[1]->get_mix_level() && item[0]->get_level() > item[1]->get_mix_level())
		{
			notify( sprintf("Xin lỗi, bạn không thể sử dụng các thiết bị hơn spar %d mức " ,item[1]->get_mix_level()));
			return 1;
		}
		make = item[0]->get("make");
		level = item[1]->get_level();
		if (make==0) make = "";
		if (strlen(make)!=level-1)
		{
			notify( "Tinh chỉnh bằng đá quý và mức độ thiết bị không phù hợp." );
			return 1;
		}
		if (check_match(item[0], item[1])==0)
		{
			notify( "Các loại đá quý không phù hợp không thể được tinh chế" );
			return 1;
		}
		switch(level)
		{
		case 1: rate = 100; break;
		case 2: rate = 90; break;
		case 3: rate = 80; break;
		case 4: rate = 70; break;
		case 5: rate = 60; break;
		case 6: rate = 50; break;
		case 7: rate = 40; break;
		case 8: rate = 30; break;
		case 9: rate = 20; break;
	       default: rate = 10; break;
		}
		if(level!=1 && me->get_vip() && !me->get_save_2("vip_package.trial"))
			rate += 5;
	        if (random100()<rate)
	        {
	        	item[0]->add(item[1]->get_diamond_type(), item[1]->get_diamond_add());
	        	make += item[1]->get_diamond_index();
	        	item[0]->set("make", make);
	        	if (item[1]->is_record())
	        	{
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
				"/sys/user/cmd"->log_item(result);
			}
		        item[1]->remove_from_user();
		        destruct( item[1] );
		        send_user( me, "%c%d%c", 0x31, getoid(item[0]), 0 );
	        	write_user( me,	ECHO " %s tinh luyện thành công! Bạn đạt được %s + %d .", item[0]->get_name(), item[0]->get_name(), level );
	        	if (level>=9)
	        	{
	        		result = HIY+ sprintf("Chúc mừng %s ( %d ) thành công luyện được %s + %d ", me->get_name(), me->get_number(), item[0]->get_name(), level);
	        		CHAT_D->sys_channel( 0, result );
	        	}
	        }
	        else
	        {
	        	if (item[1]->is_record())
	        	{
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
				"/sys/user/cmd"->log_item(result);
			}
		        item[1]->remove_from_user();
		        destruct( item[1] );
		        write_user( me,	ECHO "%s tinh luyện không thành công!", item[0]->get_name());
	        }
	        return 1;
        }
        return 1;
}
int check_match(object equip, object diamond)
{
	string type = diamond->get_diamond_type();
	switch(equip->get_equip_type())
	{
	case HEAD_TYPE:
	case ARMOR_TYPE:
		if (type=="hp") return 1;
		if (type=="mp") return 1;
		if (type=="dp") return 1;
		if (type=="pp") return 1;
		break;
	case NECK_TYPE:
		if (type!="double" && type!="double2") return 1;
		break;
	case WEAPON_TYPE:
		if (type=="ap") return 1;
		if (type=="cp") return 1;
		if (type=="!%") return 1;
		if (type=="double") return 1;
		if (type=="double2") return 1;
		break;
	case WAIST_TYPE:
		if (type!="ap" && type!="cp" && type!="double" && type!="double2") return 1;
		break;
	case BOOTS_TYPE:
		if (type!="ap" && type!="cp" && type!="!%" && type!="double" && type!="double2") return 1;
		break;
	}
}
//锻造石精炼装备
int mix1(object me,object *item)
{
	int level,rate,rate1,i,color,bind;
	string forge,result, index;
	if ( !(i=item[0]->get_equip_type())
		|| (i!=WEAPON_TYPE&&i!=ARMOR_TYPE&&i!=HEAD_TYPE&&i!=BOOTS_TYPE&&i!=WAIST_TYPE&&i!=NECK_TYPE))
		return 0;
	forge = item[0]->get("forge");
	index = item[1]->get_forge_index();
	if (index<"1" || index >"4") return 0;
	if (forge==0) forge = "";
	level = strlen(forge);
	if (item[1]->get_level()!=1)
	{
		notify( "Đá rèn cho các lớp học đầu vào công cộng trên một phân hủy." );
		return 1;
	}
	if (index=="1")
	{
		if (level>1)
		{
			notify( "Rèn đá chính chỉ rèn thiết bị trong ít hơn 2 sao." );
			return 1;
		}
	}
	if (index=="2")
	{
		if (level>3)
		{
			notify( "Trung cấp rèn đá chỉ rèn thiết bị trong vòng 4 sao." );
			return 1;
		}
	}
	bind = item[0]->get_bind();
	if ( me->get_level()/10 < level+1 )
	{
		notify( "Số sao trang bị chỉ rèn được × 10 cấp." );
		return 0;
	}
	color = item[0]->get_item_color();
	rate = 10000;
	for(i=4;i<=level;i++)
		rate = rate * 3 / 5;
	rate = rate / 100;
	if ( me->get_vip() && !me->get_save_2("vip_package.trial") )
		rate += 5;
	rate1 = random100();
	if ( is_god(me) )
	{
		if (me->get("lb")) rate1 = me->get("lb");
		tell_user(me,"Bây giờ xác xuất thành công %d là %d",rate,rate1);
	}
        if (rate1<rate)
        {
        	forge += item[1]->get_forge_index();
        	if (item[1]->is_record())
        	{
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
			"/sys/user/cmd"->log_item(result);
		}
		ITEM_EQUIP_D->init_equip_prop_5(item[0]);
	        if (color!=0) "/sys/sys/count"->add_equip("blue", -1);
        	item[0]->set("forge", forge);
	        item[1]->remove_from_user();
	        destruct( item[1] );
	        send_user( me, "%c%d%c", 0x31, getoid(item[0]), 0 );
	        level = strlen(forge);
        	write_user( me,	ECHO "Chúc mừng bạn thành công rèn ra %d tinh cấp trang bị!", level );
        	if (level>=9)
        	{
        		result = HIY+ sprintf("Chúc mừng %s thành công rèn ra %d tinh cấp trang bị!", me->get_name(), level);
        		CHAT_D->sys_channel( 0, result );
        	}
        }
        else
        {
        	if (item[1]->is_record())
        	{
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
			"/sys/user/cmd"->log_item(result);
		}
		if (item[1]->get_forge_index()=="4")
		{
		 	ITEM_EQUIP_D->reduce_equip_prop(item[0]);
		 	write_user( me,	ECHO "Thật không may, rèn thất bại. %s của bạn giảm một ngôi sao", item[0]->get_name());			
		}
		else
		{
			item[0]->delete("forge");
		 	ITEM_EQUIP_D->reset_equip_prop(item[0]);
		 	write_user( me,	ECHO "Thật không may, rèn thất bại. %s của bạn mất hết ngôi sao", item[0]->get_name());
		}
 	    	send_user( me, "%c%d%c", 0x31, getoid(item[0]), 0 );
	        item[1]->remove_from_user();
	        destruct( item[1] );
        }
        return 1;
}
YeuChienQuoc
17-10-14, 09:14 PM
Đoạn switch(level) ấy nhé :D, lâu rồi mình cũng ko dev lại nên không nhớ chính xác là cái trên hay cái dưới, thôi thì cứ cả hai cho chắc ;))
lehoanghiep9
17-10-14, 09:43 PM
Đoạn switch(level) ấy nhé :D, lâu rồi mình cũng ko dev lại nên không nhớ chính xác là cái trên hay cái dưới, thôi thì cứ cả hai cho chắc ;))
vẫn rớt như thường anh à không biết tại sao nữa em sửa cái dòng rate = 100; với cái switch(level) trong mix3.c mà không thay đổi gì cả :-ss
bảo sửa thế này thử xem, ko cần sửa 10000 thành 100 mà 8-| 8-|  if (rate>100) rate=100 (rate<100);
lehoanghiep9
17-10-14, 11:04 PM
bảo sửa thế này thử xem, ko cần sửa 10000 thành 100 mà 8-| 8-|  if (rate>100) rate=100 (rate<100); 
em sửa được rồi tks anh đã chỉ em > thay đổi chỉ số VIP cho nó lên 100 thay vì là 5 .Kết quả đập sao từ 1 - 15 thành công 100% lun hehe:D:D
 
Powered by vBulletin® Version 4.2.0 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.